#pragma once
/*
    提供全局接口 & 宏函数
        1. 提供获取指定日志器的全局接口
        2. 使用宏函数对日志器接口进行代理【代理模式】
        3. 使用宏函数直接进行日志的标准输出打印【不用获取日志器】
*/

#include "logger.hpp"

namespace senlog
{

    Logger::ptr getLogger(const std::string &name)
    {
        return senlog::LoggerManager::GetInstance().getLogger(name);
    }
    Logger::ptr deafultLogger(const std::string &name)
    {
        return senlog::LoggerManager::GetInstance().gerDefalutLogger();
    }
    // 使用只需要 debug(x, x);
    #define debug(fmt, ...) debug(__FILE__, __LINE__, fmt, ##__VA_ARGS__) // 宏替换
    #define info(fmt, ...) info(__FILE__, __LINE__, fmt, ##__VA_ARGS__)   // 宏替换
    #define warn(fmt, ...) warn(__FILE__, __LINE__, fmt, ##__VA_ARGS__)   // 宏替换
    #define error(fmt, ...) error(__FILE__, __LINE__, fmt, ##__VA_ARGS__) // 宏替换
    #define fatal(fmt, ...) fatal(__FILE__, __LINE__, fmt, ##__VA_ARGS__) // 宏替换

    #define DEBUG(fmt, ...) senlog::deafultLogger()->debug(fmt, ##__VA_ARGS__)
    #define INFO(fmt, ...) senlog::deafultLogger()->info(fmt, ##__VA_ARGS__)
    #define WARN(fmt, ...) senlog::deafultLogger()->warn(fmt, ##__VA_ARGS__)
    #define ERROR(fmt, ...) senlog::deafultLogger()->error(fmt, ##__VA_ARGS__)
    #define FATAL(fmt, ...) senlog::deafultLogger()->fatal(fmt, ##__VA_ARGS__)
}